package com.泛型;

import java.util.ArrayList;

@SuppressWarnings("all")
public class Generics传统版 {
    /**
     * 1.先指出传统方法的不足之处； 不能对传入的数据进行限制（不安全）
     *      传统的ArrayList没有泛型做限制，存放的是Object对象。可以放任何对象，例如 Dog，Cat；
     *      但是遍历时会有麻烦，例如
     *       for (Object o : list) {
     *             Dog d = (Dog) o;
     *             System.out.println(d.getName());
     *         }
     *         Object o : list  list返回的是一个Object对象，而我们需要向下转型才能拿到Dog的指定方法；
     *         然而 Dog d = (Dog) o; 确实能把Dog向下转型，
     *         如果list里存放的还有Cat对象，就无法转成Dog对象（classCastException类型转换异常）
     */
    public static void main(String[] args) {
/**   1.  传统方法 */
        ArrayList list = new ArrayList();
        list.add(new Dog("hsp"));
        list.add(new Dog("jeak"));
        list.add(new Cat("tom"));
        for (Object o : list) {
            Dog d = (Dog) o;  //list.add(new Cat("tom"));取出Cat对象转换成Dog时报错；
            System.out.println(d.getName());
        }

    }
}


/**  传统方法*/
class Dog{
    private String name;

    public Dog(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "name='" + name ;
    }
}

class Cat{
    String name;

    public Cat(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "name='" + name ;
    }
}